#include <arpa/inet.h>
#include <errno.h>
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <unistd.h>

#define MAX_BUFF_SIZE 4096
#define PORT 6666

int main(int argc, char** argv)
{
    if (argc != 2) {
        printf("usage: ./client <ipaddress>\n");
        return 0;
    }

    int fdSocket;
    char msg[MAX_BUFF_SIZE];
    sockaddr_in servaddr;

    if ((fdSocket = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        printf("create socket error: %s(errno: %d)\n", strerror(errno), errno);
        return -1;
    }

    memset(&servaddr, 0, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(PORT);
    if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0) {
        printf("inet_pton error: %s(errno: %d)\n", strerror(errno), errno);
        return -2;
    }

    if (connect(fdSocket, (sockaddr*)&servaddr, sizeof(servaddr)) < 0) {
        printf("connect error: %s(errno: %d)\n", strerror(errno), errno);
        return -3;
    }

    printf("connected\n");
    while (1) {
        printf(">> ");
        scanf("%s", msg);
        if (send(fdSocket, msg, strlen(msg), 0) < 0) {
            printf("send msg error: %s(errno: %d)\n", strerror(errno), errno);
            return -4;
        }
        if (strcmp(msg, "quit") == 0)
            break;
    }
    printf("closed\n");

    return 0;
}
